package santeclair.referentiel.optique.model;

import static javax.persistence.GenerationType.IDENTITY;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

import santeclair.lunar.framework.annotation.Code;
import santeclair.lunar.framework.annotation.HashCodeEquals;
import santeclair.lunar.framework.annotation.ToString;
import santeclair.lunar.framework.util.EqualsUtils;
import santeclair.lunar.framework.util.HashCodeUtils;
import santeclair.lunar.framework.util.ToStringUtils;
import santeclair.referentiel.optique.config.Constant;

@Entity
@Table(name = "t_supplement_verre", catalog = Constant.SCHEMA_NAME, uniqueConstraints = {@UniqueConstraint(columnNames = "code_supplement_verre"),
        @UniqueConstraint(columnNames = {"identifiant_fabricant_optique", "identifiant_distributeur_optique", "code_opto10_supplement_verre"})})
public class SupplementVerre implements java.io.Serializable {

    private static final long serialVersionUID = 4575672779204625987L;

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "identifiant_supplement_verre", unique = true, nullable = false)
    @HashCodeEquals
    @ToString
    private Integer identifiantSupplementVerre;

    @Code
    @Column(name = "code_supplement_verre", unique = true, nullable = false, length = 10)
    @HashCodeEquals
    @ToString
    private String codeSupplementVerre;

    @Column(name = "code_opto10_supplement_verre", unique = false, nullable = false, length = 50)
    @HashCodeEquals
    @ToString
    private String codeOpto10SupplementVerre;

    @Column(name = "libelle_supplement_verre", nullable = false)
    @HashCodeEquals
    @ToString
    private String libelleSupplementVerre;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "identifiant_traitement_grille", nullable = false)
    @HashCodeEquals
    @ToString
    private TraitementGrille traitementGrille;

    @ManyToOne(fetch = FetchType.LAZY, targetEntity = FabricantOptique.class)
    @JoinColumn(name = "identifiant_fabricant_optique")
    @HashCodeEquals
    @ToString
    private FabricantOptique fabricantOptique;

    @Column(name = "identifiant_fabricant_optique", insertable = false, updatable = false)
    @HashCodeEquals
    @ToString
    private Integer identifiantFabricantOptique;

    @ManyToOne(fetch = FetchType.LAZY, targetEntity = DistributeurOptique.class)
    @JoinColumn(name = "identifiant_distributeur_optique")
    @HashCodeEquals
    @ToString
    private DistributeurOptique distributeurOptique;

    @Column(name = "identifiant_distributeur_optique", insertable = false, updatable = false)
    @HashCodeEquals
    @ToString
    private Integer identifiantDistributeurOptique;

    public SupplementVerre() {
    }

    public Integer getIdentifiant() {
        return this.identifiantSupplementVerre;
    }

    public void setIdentifiant(Integer identifiantSupplementVerre) {
        this.identifiantSupplementVerre = identifiantSupplementVerre;
    }

    public String getCode() {
        return this.codeSupplementVerre;
    }

    public void setCode(String codeSupplementVerre) {
        this.codeSupplementVerre = codeSupplementVerre;
    }

    public String getCodeOpto10() {
        return this.codeOpto10SupplementVerre;
    }

    public void setCodeOpto10(String codeOpto10SupplementVerre) {
        this.codeOpto10SupplementVerre = codeOpto10SupplementVerre;
    }

    public String getLibelle() {
        return this.libelleSupplementVerre;
    }

    public void setLibelle(String libelleSupplementVerre) {
        this.libelleSupplementVerre = libelleSupplementVerre;
    }

    public DistributeurOptique getDistributeurOptique() {
        return distributeurOptique;
    }

    public void setDistributeurOptique(DistributeurOptique distributeurOptique) {
        this.distributeurOptique = distributeurOptique;
    }

    public FabricantOptique getFabricantOptique() {
        return fabricantOptique;
    }

    public void setFabricantOptique(FabricantOptique fabricantOptique) {
        this.fabricantOptique = fabricantOptique;
    }

    public TraitementGrille getTraitementGrille() {
        return traitementGrille;
    }

    public void setTraitementGrille(TraitementGrille traitementGrille) {
        this.traitementGrille = traitementGrille;
    }

    public Integer getIdentifiantFabricantOptique() {
        return identifiantFabricantOptique;
    }

    public void setIdentifiantFabricantOptique(Integer identifiantFabricantOptique) {
        this.identifiantFabricantOptique = identifiantFabricantOptique;
    }

    public Integer getIdentifiantDistributeurOptique() {
        return identifiantDistributeurOptique;
    }

    public void setIdentifiantDistributeurOptique(Integer identifiantDistributeurOptique) {
        this.identifiantDistributeurOptique = identifiantDistributeurOptique;
    }

    @Override
    public String toString() {
        return ToStringUtils.toString(this);
    }

    @Override
    public int hashCode() {
        return HashCodeUtils.hashCode(this);
    }

    @Override
    public boolean equals(Object obj) {
        return EqualsUtils.isEqual(this, obj);
    }
}
